package com.tedu.api.thread;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * 线程常用API：四
 * join()      线程同步
 * 作用：允许一个线程在另外一个线程上等待，执行完毕上一个线程，执行当前线程
 *
 *join常用在线程协调之间同步操作！
 *
 * 同步运行：执行先后顺序
 * 异步运行：执行代码没有先后顺序，各自执行自己的代码块【多线程】
 *
 * 需求：模拟下载功能：下载‘图片’---1%~100%---单一流程：线程
 *                   【下载完毕之后】
 *                   显示“图片“----单一流程：线程
 *   同步运行：执行完毕下载图片操作，显示图片操作
 *
 */
public class Thread_join {
    //图片是否下载完毕 共享状态变量---线程同步 |true下载完毕，false没有下载
   public static boolean isFinish=false;
    public static void main(String[] args) {
        //创建 下载线程，功能：1%~100% download
        System.out.println("下载：开始下载图片");
        Thread download=new Thread(()->{
        for (int i=0;i<100;i++){
            System.out.println("下载进度："+i+"%");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        isFinish=true; //当百分比到一百 下载状态改为true 下载完毕
            System.out.println("准备显示图片中...");
    });
        download.start();
        //1.创建 显示线程，功能 显示图片  下载完毕之后显示show
        System.out.println("准备显示图片中...");
        Thread show=new Thread(()->{
            //2.在显示图片前，必须下载完毕图片
            try {
                download.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //3.如果图片没有下载完毕，打开失败
            if (!isFinish){
                throw new RuntimeException("加载图片失败~~");
            }
            System.out.println("恭喜：图片下载完毕");
        });
        show.start();
    }
}
